"""
面向对象：其他内置的方法
"""


class Student:
    name = None
    age = None

    # 构造方法，用于创建类对象时设置初始化行为
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # __str__ 魔术方法 类对象转换为字符串的行为
    def __str__(self):
        return f"Student对象，name={self.name}, age={self.age}"

    # __lt__ 魔术方法 对象属性进行小于或者大于的比较

    def __lt__(self, other):
        return self.age < other.age

    # __le__ 魔术方法 用于两个类对象进行大于等于或者小于等于的比较
    def __le__(self, other):
        return self.age <= other.age

    # __eq__ 用于两个类对象进行相等的比较
    def __eq__(self, other):
        return self.name == other.name

    # __add__ 魔术方法重写，属性相加
    def __add__(self, other):
        return self.name + other.name

    # __len__ 计算属性的长度
    def __len__(self):
        return len(self.name)


stu1 = Student("张学油", 61)
print(stu1)

# __lt__
stu2 = Student("周杰轮", 41)
stu3 = Student("林君杰", 39)
print(f"stu2 <= stu3：{stu2 <= stu3}")
print(f"stu2 >= stu3：{stu2 >= stu3}")

# __eq__
stu4 = Student("周杰轮", 41)
print(f"stu2 == stu4：{stu2 == stu4}")

# __add__ 两个对象的加法运算
print(stu1 + stu2)

# 计算对象的长度 具体计算的是对象name属性的长度
print(len(stu1))
